Observable

Observable<Person>
Person의 변경을 모니터링 하려는 관찰자들을 private 리스트로 관리
관찰자가 Person의 변경 이벤트에 수신 등록 또는 해제(subscribe()/ unsubscribe())할 수 있다.
notify()를 통해 변경 이벤트가 발생했을 때, 모든 관찰자에게 정보가 전달되도록 한다.
template <typename T> struct Observable{
void notify(T& source, const string& name) {
for(auto obs: observers)
obs->field_changed(source, name);
}
void subscribe(Observer<T>* f){ observers.push_back(f); }
void unsubscribe(Observer<T>* f){
// ...
}
private:
vector<Observer<T>*> observers;
};
struct Person: Observable<Person>{
void set_age(const int age){
if(this->age==age) return; // ,
this->age=age;
notify(*this, "age");
}
private:
int age;
};